\documentclass[format=sigconf]{acmart}
\bibliographystyle{plainnat}

\usepackage[utf8]{inputenc}

\def\inputfig#1{\input #1}
\def\inputtex#1{\input #1}
\def\inputal#1{\input #1}
\def\inputcode#1{\input #1}

\inputtex{logos.tex}
\inputtex{refmacros.tex}
\inputtex{other-macros.tex}

\acmConference[ELS’22]{the 15th European Lisp Symposium}{March 21--22
  2022}{Porto, Portugal}
%\acmISBN{978-2-9557474-3-8}
\acmISBN{}
\acmDOI{10.5281/zenodo.6331519}
\startPage{1}
\setcopyright{rightsretained}
\copyrightyear{2022}

\begin{document}
\title{A CLOS protocol for lexical environments}

\author{Robert Strandh}
\email{robert.strandh@gmail.com}
\affiliation{Unaffiliated}

\author{Irène Durand
}
\email{irene.durand@u-bordeaux.fr}
\affiliation{
  \institution{LaBRI, University of Bordeaux}
  \streetaddress{351 cours de la libération}
  \city{Talence}
  \country{France}}

\begin{abstract}
The concept of an \emph{environment} is mentioned in many places in
the \commonlisp{} standard, but the nature of the object is not
specified.  For the purpose of this paper, an environment is a mapping
(or several such mappings when there is more than one namespace as is
the case for \commonlisp{}) from \emph{names} to \emph{meanings}.

In this paper, we propose a replacement for the environment protocol
documented in the book ``Common Lisp the Language, second edition'' by
Guy Steele.  Rather than returning multiple values as the functions in
that protocol do, the protocol suggested in this paper is designed so
that functions return instances of standard classes.  Accessor
functions on those instances supply the information needed by a
compiler or any other \emph{code walker} application.

The advantage of our approach is that a protocol based on generic
functions and standard classes is easier to extend in
backward-compatible ways than the previous protocol, so that
implementations can define additional functionality on these objects.
Furthermore, \clos{} features such as auxiliary methods can be used on
these objects, making it possible to extend or override functionality
provided by the protocol, for implementation-specific purposes.
\end{abstract}

\begin{CCSXML}
<ccs2012>
<concept>
<concept_id>10011007.10011006.10011041</concept_id>
<concept_desc>Software and its engineering~Compilers</concept_desc>
<concept_significance>500</concept_significance>
</concept>
</ccs2012>
\end{CCSXML}

\ccsdesc[500]{Software and its engineering~Compilers}

\keywords{\clos{}, \commonlisp{}, Environment, Compilation}

\maketitle

\inputtex{spec-macros.tex}

\inputtex{sec-introduction.tex}
\inputtex{sec-previous.tex}
\inputtex{sec-our-method.tex}
\inputtex{sec-benefits.tex}
\inputtex{sec-disadvantages.tex}
\inputtex{sec-conclusions.tex}
\inputtex{sec-acknowledgements.tex}

\bibliography{environment-info}
\end{document}

%%  LocalWords:  sandboxing runtime
